使用金仓的连接格式为:
1
| "kingbase+ksycopg2://用户名:密码@172.16.150.172:54321/db名称"
|
kingbase 为 SQLAlchemy 方言,ksycopg2 为 Python 依赖包,所以我们需要解决两个依赖
资源下载
根据环境信息,需要到 KES-电科金仓官网 下载对应的资源文件 Python-KSYCOPG2 和 Python-SQLALCHEMY

ksycopg2
ksycopg2 在 pypi 仓库中也存在,刚开始直接使用 pip 进行了安装,但是发现少很多 .so 依赖,于是走了些弯路。所以不要直接 pip 进行安装 ksycopg2
⚠️不要直接 pip install ksycopg2
从上述下载的压缩包中,找到对应环境的 ksycopg2,直接拷贝到项目的 site-packages 中。例如下面的
1
| COPY labelu/internal/statics/drive/kingbase/KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2/KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2_Python3_11/ksycopg2 /labelu/.venv/lib/python3.11/site-packages/ksycopg2
|
ksycopg2 文件夹中就有依赖的 .so 文件,为了防止运行时 .so 文件缺失,需要将其放到环境变量中去
1
| export LD_LIBRARY_PATH=/labelu/.venv/lib/python3.11/site-packages/ksycopg2:$LD_LIBRARY_PATH
|
最后在 Python 环境中尝试导入 ksycopg2,不报错即为成功
kingbase
从上述下载的压缩包中,找到对应环境的 kingbase,拷贝到 SQLAlchemy 的方言目录中,如下面的
1
| COPY labelu/internal/statics/drive/kingbase/KingbaseES_V009R001C010B0004_SQLAlchemy/SQLAlchemy-1.4-dialect/SQLAlchemy-1.4/dialects/kingbase /labelu/.venv/lib/python3.11/site-packages/sqlalchemy/dialects/kingbase
|
Dockerfile
以下为完整的 Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| FROM python:3.11-slim as builder
ENV PYTHONFAULTHANDLER=1 \ PYTHONHASHSEED=random \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ POETRY_VERSION=1.8.2 \ POETRY_NO_INTERACTION=1 \ POETRY_VIRTUALENVS_IN_PROJECT=1 \ POETRY_VIRTUALENVS_CREATE=1 \ POETRY_CACHE_DIR=/tmp/poetry_cache \ PIP_SOURCE=https://mirrors.aliyun.com/pypi/simple/
WORKDIR /labelu
RUN pip install poetry==${POETRY_VERSION} -i ${PIP_SOURCE}
COPY pyproject.toml poetry.lock* ./
RUN poetry config repositories.aliyun ${PIP_SOURCE} && \ poetry config pypi-token.aliyun "" && \ poetry source add --priority=primary aliyun ${PIP_SOURCE}
RUN poetry install --only main --no-root && rm -rf $POETRY_CACHE_DIR
FROM python:3.11-slim as runtime
ENV PYTHONFAULTHANDLER=1 \ PYTHONHASHSEED=random \ PYTHONUNBUFFERED=1 \ VIRTUAL_ENV=/labelu/.venv \ PATH="/labelu/.venv/bin:$PATH" \ LD_LIBRARY_PATH=/labelu/.venv/lib/python3.11/site-packages/ksycopg2:$LD_LIBRARY_PATH
WORKDIR /labelu
COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
COPY ./ ./
COPY labelu/internal/statics/drive/kingbase/KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2/KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2_Python3_11/ksycopg2 /labelu/.venv/lib/python3.11/site-packages/ksycopg2 COPY labelu/internal/statics/drive/kingbase/KingbaseES_V009R001C010B0004_SQLAlchemy/SQLAlchemy-1.4-dialect/SQLAlchemy-1.4/dialects/kingbase /labelu/.venv/lib/python3.11/site-packages/sqlalchemy/dialects/kingbase
RUN chmod +x ./docker-entrypoint.sh
CMD ["./docker-entrypoint.sh"]
|